﻿//-----------------------------------------------------------------------
// <copyright file="RetryHelper.cs" company="SLWY Enterprises">
// * Copyright (C) 2017 四川商旅无忧科技有限公司 版权所有。
// * version : 1.0
// * author  : qinchaoyue
// * FileName: DnsHelper.cs
// * history : created by qinchaoyue 2017-12-13 10:56:41
// </copyright>
//-----------------------------------------------------------------------

namespace Slwy.Utility.Helper
{
    using System;
    using System.Threading;

    /// <summary>
    /// 重试操作辅助类
    /// </summary>
    public static class RetryHelper
    {
        /// <summary>
        /// 重试
        /// </summary>
        /// <param name="func"> 重试方法 </param>
        /// <param name="times"> 重试次数 (1 与 100 之间的整数) </param>
        /// <param name="millisecond"> 重试等待毫秒 </param>
        /// <returns> 是否执行成功 </returns>
        public static bool Retry(Func<bool> func, int times, int millisecond = 0)
        {
            if (times <= 1 && times >= 100)
            {
                throw new ArgumentOutOfRangeException("times 参数有误。只能是介于 1 与 100（包含1和100）之间的整数。");
            }

            while (times > 0)
            {
                if (func())
                {
                    return true;
                }

                times--;
                if (millisecond > 0)
                {
                    Thread.Sleep(millisecond);
                }
            }

            return false;
        }
    }
}
